Stored Procedure (স্টোরড প্রসিডিওর) হল একটি ডাটাবেস অবজেক্ট যা SQL কোডের একটি সেটকে একটি নামের অধীনে সংরক্ষণ করে। এটি পুনরায় ব্যবহারযোগ্য, এবং আপনি একাধিক SQL স্টেটমেন্ট একত্রে সংজ্ঞায়িত করতে পারেন। PHP দিয়ে Stored Procedure Execute করার প্রক্রিয়া বেশ সহজ, তবে এটি কিছু নির্দিষ্ট পদক্ষেপ অনুসরণ করে করা হয়।
এখানে আমরা দেখব কিভাবে PHP দিয়ে MySQL ডাটাবেসে Stored Procedure execute করা যায়।
1. Stored Procedure তৈরি করা
প্রথমে, MySQL-এ একটি স্টোরড প্রসিডিওর তৈরি করতে হবে। ধরুন, আমরা একটি স্টোরড প্রসিডিওর তৈরি করব যা একটি টেবিল থেকে ব্যবহারকারীর নাম বের করবে।
DELIMITER
DELIMITER ;
এখানে:
DELIMITER $$ দিয়ে নতুন ডেলিমিটার ব্যবহার করা হয়েছে, কারণ স্টোরড প্রসিডিওর একাধিক SQL স্টেটমেন্ট থাকতে পারে।GetUserByIdনামের একটি স্টোরড প্রসিডিওর তৈরি করা হয়েছে, যা ইনপুট হিসেবে একটিuser_idগ্রহণ করবে এবং সেই ব্যবহারকারীর নাম (username) রিটার্ন করবে।DELIMITER ;দিয়ে ডেলিমিটারটি আবার পূর্বাবস্থায় ফেরানো হয়েছে।2. PHP দিয়ে Stored Procedure Execute করা
PHP ব্যবহার করে আমরা এই স্টোরড প্রসিডিওরটি execute করতে পারি। এর জন্য PDO বা MySQLi ব্যবহার করা যায়। এখানে আমরা PDO ব্যবহার করব, কারণ এটি আরও নিরাপদ এবং সহজ।
2.1 PHP PDO দিয়ে Stored Procedure Execute করা
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // স্টোরড প্রসিডিওর এক্সিকিউট করা $user_id = 1; // উদাহরণস্বরূপ, আমরা ব্যবহারকারীর ID পাঠাবো $stmt = $conn->prepare("CALL GetUserById(:user_id)"); // ইনপুট প্যারামিটার বাইন্ড করা $stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT); // প্রসিডিওর এক্সিকিউট করা $stmt->execute(); // রেজাল্ট ফেচ করা $result = $stmt->fetch(PDO::FETCH_ASSOC); // ফলাফল প্রিন্ট করা if ($result) { echo "Username: " . $result['username']; } else { echo "No user found with that ID."; } } catch(PDOException $e) { echo "Error: " . $e->getMessage(); } // সংযোগ বন্ধ করা $conn = null; ?>2.2 কোডের ব্যাখ্যা:
- PDO সংযোগ তৈরি:
new PDO()ফাংশনের মাধ্যমে MySQL ডাটাবেসের সাথে সংযোগ স্থাপন করা হয়। PDO তে সংযোগের সময় ডাটাবেসের ঠিকানা, ব্যবহারকারীর নাম এবং পাসওয়ার্ড পাস করা হয়। - Stored Procedure Call করা:
prepare()মেথডের মাধ্যমে স্টোরড প্রসিডিওরটি প্রস্তুত করা হয়। এখানেCALL GetUserById(:user_id)ব্যবহার করা হয়েছে, যেখানে:user_idএকটি প্যারামিটার যা পরে বাইন্ড করা হবে।
- bindParam(): এটি ইনপুট প্যারামিটারটি স্টোরড প্রসিডিওরে বাইনড করার জন্য ব্যবহৃত হয়। এখানে
user_idপ্যারামিটারটি একটি ইনটিজার হিসেবে বাইনড করা হচ্ছে। - execute(): এটি স্টোরড প্রসিডিওরটি এক্সিকিউট করতে ব্যবহৃত হয়।
- fetch(): এটি ডাটাবেস থেকে আউটপুট ফেচ করতে ব্যবহৃত হয়। এখানে আমরা
PDO::FETCH_ASSOCব্যবহার করেছি যাতে রেজাল্ট অ্যারে আকারে পাওয়া যায়। - Error Handling: যদি কোনো ত্রুটি ঘটে, তবে
catch(PDOException $e)ব্লকে ত্রুটির বার্তা দেখানো হয়।
3. Multiple Parameters সহ Stored Procedure Call করা
ধরা যাক, আমাদের একটি স্টোরড প্রসিডিওর আছে যা দুটি ইনপুট প্যারামিটার গ্রহণ করে। উদাহরণস্বরূপ, একটি প্রসিডিওর যেটি ব্যবহারকারীর নাম এবং বয়স দিয়ে ডেটা বের করবে।
3.1 Multiple Parameters সহ Stored Procedure তৈরি করা
CREATE PROCEDURE GetUserByNameAndAge(IN username VARCHAR(50), IN age INT) BEGIN SELECT * FROM users WHERE username = username AND age = age; END $$ DELIMITER ;DELIMITER $$3.2 PHP দিয়ে Multiple Parameters সহ Stored Procedure Execute করা
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "test_db"; // PDO সংযোগ তৈরি করা try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // স্টোরড প্রসিডিওর এক্সিকিউট করা $username = 'john_doe'; // উদাহরণস্বরূপ, ব্যবহারকারীর নাম $age = 25; // উদাহরণস্বরূপ, বয়স $stmt = $conn->prepare("CALL GetUserByNameAndAge(:username, :age)"); // ইনপুট প্যারামিটার বাইন্ড করা $stmt->bindParam(':username', $username, PDO::PARAM_STR); $stmt->bindParam(':age', $age, PDO::PARAM_INT); // প্রসিডিওর এক্সিকিউট করা $stmt->execute(); // রেজাল্ট ফেচ করা $result = $stmt->fetch(PDO::FETCH_ASSOC); // ফলাফল প্রিন্ট করা if ($result) { echo "User Found: " . $result['username'] . ", Age: " . $result['age']; } else { echo "No user found."; } } catch(PDOException $e) { echo "Error: " . $e->getMessage(); } // সংযোগ বন্ধ করা $conn = null; ?>4. Stored Procedure Error Handling
যখন আপনি স্টোরড প্রসিডিওর চালাবেন, তখন কিছু ত্রুটি ঘটতে পারে, যেমন ভুল প্যারামিটার বা ডাটাবেস ত্রুটি। PDO তে ত্রুটির হ্যান্ডলিং করার জন্য আপনি
try-catchব্লক ব্যবহার করতে পারেন। যদি কোনো ত্রুটি ঘটে, তাহলে এটি ক্যাচ করা যাবে এবং ত্রুটির বার্তা দেখানো হবে।সারাংশ
Stored Procedures ডাটাবেসে বেশ শক্তিশালী একটি টুল, যা একাধিক SQL কোড একত্রে সংরক্ষণ এবং পরিচালনা করতে সাহায্য করে। PHP দিয়ে Stored Procedures execute করতে
PDOব্যবহার করা সবচেয়ে নিরাপদ এবং সহজ পদ্ধতি। পিএইচপি তেprepare(),bindParam(), এবংexecute()মেথড ব্যবহার করে আপনি স্টোরড প্রসিডিওরকে খুব সহজেই কল করতে পারেন।
Read more